
package se.sll.service.catalogue.product.api.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Generated;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import org.codehaus.jackson.annotate.JsonAnyGetter;
import org.codehaus.jackson.annotate.JsonAnySetter;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonPropertyOrder;
import org.codehaus.jackson.map.annotate.JsonSerialize;


/**
 * A single product
 * 
 */
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
    "status",
    "productId",
    "name",
    "displayName",
    "sourceSystemHSAId",
    "description",
    "requestComment",
    "property",
    "creationTime",
    "updateTime",
    "updatedByHsaid",
    "codes"
})
public class ProductList {

    /**
     * 
     * (Required)
     * 
     */
    @JsonProperty("status")
    @NotNull
    private String status;
    /**
     * 
     */
    @JsonProperty("productId")
    private String productId;
    /**
     * 
     */
    @JsonProperty("name")
    private String name;
    /**
     * 
     */
    @JsonProperty("displayName")
    private String displayName;
    /**
     * An Instance Identifier
     * 
     */
    @JsonProperty("sourceSystemHSAId")
    @Valid
    private SourceSystemHSAId sourceSystemHSAId;
    /**
     * 
     */
    @JsonProperty("description")
    private String description;
    /**
     * 
     */
    @JsonProperty("requestComment")
    private String requestComment;
    /**
     * a collection of generic CV Types
     * 
     */
    @JsonProperty("property")
    @Valid
    private List<Property> property = new ArrayList<Property>();
    /**
     * 
     */
    @JsonProperty("creationTime")
    private Date creationTime;
    /**
     * 
     */
    @JsonProperty("updateTime")
    private Date updateTime;
    /**
     * 
     */
    @JsonProperty("updatedByHsaid")
    private String updatedByHsaid;
    /**
     * a collection of product references
     * 
     */
    @JsonProperty("codes")
    @Valid
    private List<Code> codes = new ArrayList<Code>();
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    /**
     * 
     * (Required)
     * 
     * @return
     *     The status
     */
    @JsonProperty("status")
    public String getStatus() {
        return status;
    }

    /**
     * 
     * (Required)
     * 
     * @param status
     *     The status
     */
    @JsonProperty("status")
    public void setStatus(String status) {
        this.status = status;
    }

    public ProductList withStatus(String status) {
        this.status = status;
        return this;
    }

    /**
     * 
     * @return
     *     The productId
     */
    @JsonProperty("productId")
    public String getProductId() {
        return productId;
    }

    /**
     * 
     * @param productId
     *     The productId
     */
    @JsonProperty("productId")
    public void setProductId(String productId) {
        this.productId = productId;
    }

    public ProductList withProductId(String productId) {
        this.productId = productId;
        return this;
    }

    /**
     * 
     * @return
     *     The name
     */
    @JsonProperty("name")
    public String getName() {
        return name;
    }

    /**
     * 
     * @param name
     *     The name
     */
    @JsonProperty("name")
    public void setName(String name) {
        this.name = name;
    }

    public ProductList withName(String name) {
        this.name = name;
        return this;
    }

    /**
     * 
     * @return
     *     The displayName
     */
    @JsonProperty("displayName")
    public String getDisplayName() {
        return displayName;
    }

    /**
     * 
     * @param displayName
     *     The displayName
     */
    @JsonProperty("displayName")
    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public ProductList withDisplayName(String displayName) {
        this.displayName = displayName;
        return this;
    }

    /**
     * An Instance Identifier
     * 
     * @return
     *     The sourceSystemHSAId
     */
    @JsonProperty("sourceSystemHSAId")
    public SourceSystemHSAId getSourceSystemHSAId() {
        return sourceSystemHSAId;
    }

    /**
     * An Instance Identifier
     * 
     * @param sourceSystemHSAId
     *     The sourceSystemHSAId
     */
    @JsonProperty("sourceSystemHSAId")
    public void setSourceSystemHSAId(SourceSystemHSAId sourceSystemHSAId) {
        this.sourceSystemHSAId = sourceSystemHSAId;
    }

    public ProductList withSourceSystemHSAId(SourceSystemHSAId sourceSystemHSAId) {
        this.sourceSystemHSAId = sourceSystemHSAId;
        return this;
    }

    /**
     * 
     * @return
     *     The description
     */
    @JsonProperty("description")
    public String getDescription() {
        return description;
    }

    /**
     * 
     * @param description
     *     The description
     */
    @JsonProperty("description")
    public void setDescription(String description) {
        this.description = description;
    }

    public ProductList withDescription(String description) {
        this.description = description;
        return this;
    }

    /**
     * 
     * @return
     *     The requestComment
     */
    @JsonProperty("requestComment")
    public String getRequestComment() {
        return requestComment;
    }

    /**
     * 
     * @param requestComment
     *     The requestComment
     */
    @JsonProperty("requestComment")
    public void setRequestComment(String requestComment) {
        this.requestComment = requestComment;
    }

    public ProductList withRequestComment(String requestComment) {
        this.requestComment = requestComment;
        return this;
    }

    /**
     * a collection of generic CV Types
     * 
     * @return
     *     The property
     */
    @JsonProperty("property")
    public List<Property> getProperty() {
        return property;
    }

    /**
     * a collection of generic CV Types
     * 
     * @param property
     *     The property
     */
    @JsonProperty("property")
    public void setProperty(List<Property> property) {
        this.property = property;
    }

    public ProductList withProperty(List<Property> property) {
        this.property = property;
        return this;
    }

    /**
     * 
     * @return
     *     The creationTime
     */
    @JsonProperty("creationTime")
    public Date getCreationTime() {
        return creationTime;
    }

    /**
     * 
     * @param creationTime
     *     The creationTime
     */
    @JsonProperty("creationTime")
    public void setCreationTime(Date creationTime) {
        this.creationTime = creationTime;
    }

    public ProductList withCreationTime(Date creationTime) {
        this.creationTime = creationTime;
        return this;
    }

    /**
     * 
     * @return
     *     The updateTime
     */
    @JsonProperty("updateTime")
    public Date getUpdateTime() {
        return updateTime;
    }

    /**
     * 
     * @param updateTime
     *     The updateTime
     */
    @JsonProperty("updateTime")
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public ProductList withUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
        return this;
    }

    /**
     * 
     * @return
     *     The updatedByHsaid
     */
    @JsonProperty("updatedByHsaid")
    public String getUpdatedByHsaid() {
        return updatedByHsaid;
    }

    /**
     * 
     * @param updatedByHsaid
     *     The updatedByHsaid
     */
    @JsonProperty("updatedByHsaid")
    public void setUpdatedByHsaid(String updatedByHsaid) {
        this.updatedByHsaid = updatedByHsaid;
    }

    public ProductList withUpdatedByHsaid(String updatedByHsaid) {
        this.updatedByHsaid = updatedByHsaid;
        return this;
    }

    /**
     * a collection of product references
     * 
     * @return
     *     The codes
     */
    @JsonProperty("codes")
    public List<Code> getCodes() {
        return codes;
    }

    /**
     * a collection of product references
     * 
     * @param codes
     *     The codes
     */
    @JsonProperty("codes")
    public void setCodes(List<Code> codes) {
        this.codes = codes;
    }

    public ProductList withCodes(List<Code> codes) {
        this.codes = codes;
        return this;
    }

    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }

    public ProductList withAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
        return this;
    }

}
